/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.losalpes.jms;

import com.losalpes.catalog.ICatalogService;
import com.losalpes.persistence.entity.Mueble;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 *Clase que representa una de las aplicaciones llamado call center
 * @author Henry.Quiroga
 */
@MessageDriven(mappedName = "jms/PromocionTopic", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "clientId", propertyValue = "CallCenterMessageBean"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "CallCenterMessageBean")
    })
public class CallCenterMessageBean implements MessageListener {

    @Resource
    private MessageDrivenContext mdc;
    @EJB
    private ICatalogService catalogService;
    
    /**
     * constructor de la clase
     */
    public CallCenterMessageBean() {
    }

    /**
     * Recibe el mensaje proveniente de publicador
     * @param message mensaje de entrada
     */
    public void onMessage(Message message) {
        TextMessage msg = null;
        try {
            if (message instanceof TextMessage) {
                msg = (TextMessage) message;
                Mueble mueble = catalogService.getMueble(Long.parseLong(msg.getText()) );

                SimpleDateFormat formato = new SimpleDateFormat("dd-MMM-yyyy");
                String fechaInicial = formato.format(mueble.getFechaInicioPromocion());
                String fechaFinal = formato.format(mueble.getFechaFinPromocion());

                String mensaje ="promocion mueble " + mueble.getReferencia() + " call center: Promocion " + mueble.getDescripcionPromocion() + " desde el dia "  + fechaInicial + " hasta el dia " + fechaFinal;
                mensaje += " para el mueble " + mueble.getNombre() + "(" + mueble.getReferencia() + ") " + mueble.getTipo();

                Logger.getLogger(CallCenterMessageBean.class.getName()).log(Level.INFO, mensaje);
            } else {
                Logger.getLogger(CallCenterMessageBean.class.getName()).log(Level.SEVERE,
                        "Mensaje de tipo equivocado: " + message.getClass().getName());
            }
        } catch (JMSException e) {
            e.printStackTrace();
            mdc.setRollbackOnly();
        } catch (Throwable te) {
            te.printStackTrace();
        }
    }
    
}
